//
//  OAuthViewController.swift
//  weibo
//
//  Created by Mike on 15/5/12.
//  Copyright (c) 2015年 Mike. All rights reserved.
//

import UIKit
import SVProgressHUD
class OAuthViewController: UIViewController, UIWebViewDelegate {

    @IBAction func close(sender: UIBarButtonItem) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }
    
    let WB_Client_Id = "2911393906" // 应用的id
    let WB_Redirect_Uri = "http://m.taobao.com" // 授权的回调url
    let WB_Client_Secret = "46a5d7903b6613e74bdfbc9981452496" // 应用的secret码
    
    
    var webView: UIWebView  {
        return view as! UIWebView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        loadAuthPage()
        
    }
    // 加载控制器的时候变会加载"新浪微博"oAuth的授权界面，也就是登录新浪微博的界面
    private func loadAuthPage() {
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=" + WB_Client_Id + "&redirect_uri=" + WB_Redirect_Uri
        let url = NSURL(string: urlString)!
        
        webView.loadRequest(NSURLRequest(URL: url))
    }
    
    /*
    在授权页面中，点击登录后要请求的页面
    URL: https://api.weibo.com/oauth2/authorize
        在这个页面点击取消
    https://api.weibo.com/oauth2/authorize#
    https://api.weibo.com/oauth2/authorize
    http://m.taobao.com/?error_uri=%2Foauth2%2Fauthorize&error=access_denied&error_description=user%20denied%20your%20request.&error_code=21330
    在这个页面点击授权之后
        授权成功：
         URL: https://api.weibo.com/oauth2/authorize?client_id=2911393906&redirect_uri=http://www.taobao.com#
         URL: https://api.weibo.com/oauth2/authorize 
         URL: http://www.taobao.com/?code=e43aa66a62c736fcbafec8afdae053d9
         URL: http://m.taobao.com/?sprefer=sypc00&code=e43aa66a62c736fcbafec8afdae053d9
    
    
    拦截请求后处理的思路：
    1> 如果 URL 以 https://api.weibo.com/ 开头就继续加载页面
    2> 如果 URL 以 http://www.taobao.com 开头，不用加载页面 ，在本地失败或成功的处理
    - 判断是否有 code，就是请求码token
    3> 其他页面统一不加载
    */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
//        println(request)
//        println(request.URL!)
        
        let urlString = request.URL!.absoluteString!
        
        // 过滤1：
        if urlString.hasPrefix("https://api.weibo.com/") {
            return true // 正常加载
        }
        
        // 过滤2： 如果不是以“http://m.taobao.com”开头 不做处理
        if !urlString.hasPrefix(WB_Redirect_Uri) {
            return false
        }
        // 过滤3： 到这里 说明是以"http://m.taobao.com"开头的，登录成功，进入了询问授权的页面
        let codeString = "code="
//        println(request)
        let query = request.URL!.query!
        
        if query.hasPrefix(codeString) { // 点击了授权并且成功了
            // 获取请求码，用来获取token
            let code = (query as NSString).substringFromIndex(codeString.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
            println(code)
            // 通过code 加载token
            loadToken(fromCode: code)
        } else {// 点击了取消，实际上点击了取消之后，依然会跳转到回调页面，因此要处理
            SVProgressHUD.dismiss() // 将hub作为中转界面，一点回调页面的地址都不加载
            self.dismissViewControllerAnimated(true, completion: nil)
        
        }
        
        return false
    }
    
    func loadToken(#fromCode: String) {
        let params = ["client_id": WB_Client_Id,
            "client_secret": WB_Client_Secret,
            "grant_type": "authorization_code",
            "code": fromCode,
            "redirect_uri": WB_Redirect_Uri, ]
        
        // 通过用户类UserAccount的方法加载token
         UserAccount.loadAccessToken(params, complete: { (account, error) -> Void in
            if account != nil {
                sharedUserAccount = account
                SVProgressHUD.dismiss()
                return
            }
            // 其他情况 error !=nil
            SVProgressHUD.showErrorWithStatus("您的网络不给力")
            println(error) // 打印错误
         })
    }
    
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }

}
